/******************************************************************************
 *      Mestrado em Ciência da Computação - UFMS
 *		Redes de Computadores - Prof. Dr. Ronaldo Alves Ferreira
 *		Alunos: Geraldo Landre, Marcel Tolentino, Vinícius Bueno
 *****************************************************************************/

#ifndef PARSER_H
#define PARSER_H

#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <dirent.h>
#include <errno.h>

#include "dirmanip.h"
#include "request.h"
#include "enums.h"
#include "parameters.h"
#include "server.h"

int get_path(vstring *line,header_data *hd);

int parse_first_line(vstring **line,header_data *hd);

int parse_parameter(vstring **line,header_data **hd);

int is_first_line(vstring *line);

int parse(vstring *msg,header_data **hd);

void miss_cache(header_data **hd);

/*	Retorna o tamanho da resposta ou -1 em caso de erro	*/
int handle_request(header_data **hd);

vstring* get_header(header_data **hd);

vstring* get_html_error(int error, char* custom_message);

/*
	Função responsável por tratar a requisição do cliente
	quando o servidor está em manutenção
	Retorno:
		- resposta para o cliente, informando que o servidor está em manutenção
*/
char* get_maintenance_msg(header_data **hd, char* custom_message);

/*	Retorna toda a mensagem a ser enviada para o cliente
	de acordo com a variável global httperr		*/
vstring* get_msg_error(header_data **hd,char* custom_message);

/**
 * Fun��o respons�vel por criar a mensagem a ser enviada para o servidor
 * Por enquanto ela s� modifica a FIRSTLINE para efetuar o GET
 * @param hd
 */
vstring* create_srv_msg(header_data **hd);

int get_from_origin_server(header_data **client);

void remove_header_response(header_data **hd);

#endif
